home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Screenblankers / GBlanker / GSource / Blankers / LineBlanker / blank.c next >
C/C++ Source or Header  |  1996-09-26  |  4KB  |  213 lines

  1. /*
  2.  *  Copyright (c) 1994 Michael D. Bayne.
  3.  *  All rights reserved.
  4.  *
  5.  *  Please see the documentation accompanying the distribution for distribution
  6.  *  and disclaimer information.
  7.  */
  8.  
  9. #include "/includes.h"
  10.  
  11. #include "LineBlanker_rev.h"
  12. STATIC const UBYTE VersTag[] = VERSTAG;
  13.  
  14. VOID Defaults( PrefObject *Prefs )
  15. {
  16.     Prefs[0].po_Active = 0;
  17. }
  18.  
  19. LONG RenderLines( struct Screen *LScr, USHORT Mode )
  20. {
  21.     struct RastPort *rp = &LScr->RastPort;
  22.     int i, x, y, midx, midy, x2, y2;
  23.     LONG RetVal = OK;
  24.     
  25.     SetAPen( rp, 1 );
  26.     switch( Mode )
  27.     {
  28.     case 0:
  29.         /* Cross
  30.          */
  31.         midy = LScr->Height - 2 - ( LScr->Height - 1 ) % 2;
  32.         midx = LScr->Width - 2 - ( LScr->Width - 1 ) % 2;
  33.         for( i = 0; i < 4 && RetVal == OK; i += 2 )
  34.         {
  35.             for( x = i, x2 = midx - i;
  36.                 x < LScr->Width-1 &&(( RetVal = ContinueBlanking()) == OK );
  37.                 x += 4, x2 -= 4 )
  38.             {
  39.                 Move( rp, x2, LScr->Height - 1 );
  40.                 Draw( rp, x, 0 );
  41.                 Move( rp, x2, 0 );
  42.                 Draw( rp, x, LScr->Height - 1 );
  43.             }
  44.             for( y = i, y2 = midy - i;
  45.                 y < LScr->Height-1 &&(( RetVal = ContinueBlanking()) == OK );
  46.                 y += 4, y2 -= 4 )
  47.             {
  48.                 Move( rp, 0, y2 );
  49.                 Draw( rp, LScr->Width - 1, y );
  50.                 Move( rp, LScr->Width - 1, y2 );
  51.                 Draw( rp, 0, y );
  52.             }
  53.         }
  54.         break;
  55.     case 1:
  56.         /* Cycle
  57.          */
  58.         midx = LScr->Width / 2;
  59.         midy = LScr->Height / 2;
  60.         for( i = 0; i < 4; i++ )
  61.         {
  62.             for( x = i; x < LScr->Width; x += 4 )
  63.             {
  64.                 Move( rp, midx, midy );
  65.                 Draw( rp, x, 0 );
  66.             }
  67.             if(( RetVal = ContinueBlanking()) != OK )
  68.                 break;
  69.             for( y = i;    y < LScr->Height; y += 4 )
  70.             {
  71.                 Move( rp, midx, midy );
  72.                 Draw( rp, LScr->Width - 1, y );
  73.             }
  74.             if(( RetVal = ContinueBlanking()) != OK )
  75.                 break;
  76.             for( x = LScr->Width - 1 - i; x > 0; x -= 4 )
  77.             {
  78.                 Move( rp, midx, midy );
  79.                 Draw( rp, x, LScr->Height - 1 );
  80.             }
  81.             if(( RetVal = ContinueBlanking()) != OK )
  82.                 break;
  83.             for( y = LScr->Height - 1 - i; y > 0; y -= 4 )
  84.             {
  85.                 Move( rp, midx, midy );
  86.                 Draw( rp, 0, y );
  87.             }
  88.             if(( RetVal = ContinueBlanking()) != OK )
  89.                 break;
  90.         }
  91.         break;
  92.     case 2:
  93.         /* Perimeter
  94.          */
  95.         for( i = 0; i < 3 &&(( RetVal = ContinueBlanking()) == OK ); i++ )
  96.         {
  97.             for( x = i; x < LScr->Width; x += 3 )
  98.             {
  99.                 Move(rp,0,LScr->Height-1);
  100.                 Draw(rp,x,0);
  101.             }
  102.             for( y = i; y < LScr->Height; y += 3 )
  103.             {
  104.                 Move(rp,0,LScr->Height-1);
  105.                 Draw(rp,LScr->Width-1,y);
  106.             }
  107.             for( y = LScr->Height - 1 - i; y > 0; y -= 3 )
  108.             {
  109.                 Move(rp,LScr->Width-1,LScr->Height-1);
  110.                 Draw(rp,0,y);
  111.             }
  112.             for( x = i; x < LScr->Width; x += 3 )
  113.             {
  114.                 Move(rp,LScr->Width-1,LScr->Height-1);
  115.                 Draw(rp,x,0);
  116.             }
  117.             for( x = LScr->Width - 1 - i; x > 0; x -= 3 )
  118.             {
  119.                 Move(rp,LScr->Width-1,0);
  120.                 Draw(rp,x,LScr->Height-1);
  121.             }
  122.             for( y = LScr->Height - 1 - i; y > 0; y -= 3 )
  123.             {
  124.                 Move(rp,LScr->Width-1,0);
  125.                 Draw(rp,0,y);
  126.             }
  127.             for( y = i; y < LScr->Height; y += 3 )
  128.             {
  129.                 Move(rp,0,0);
  130.                 Draw(rp,LScr->Width-1,y);
  131.             }
  132.             for( x = LScr->Width - 1 - i; x > 0; x -= 3 )
  133.             {
  134.                 Move(rp,0,0);
  135.                 Draw(rp,x,LScr->Height-1);
  136.             }
  137.         }
  138.         break;
  139.     case 3:
  140.         /* Propeller
  141.          */
  142.         for( i = 0; i < 4 &&(( RetVal = ContinueBlanking()) == OK ); i++ )
  143.         {
  144.             for( x = i, x2 = LScr->Width - 1 - i; x < LScr->Width;
  145.                 x += 4, x2 -= 4 )
  146.             {
  147.                 Move(rp,x2,LScr->Height-1);
  148.                 Draw(rp,x,0);
  149.             }
  150.             for( y = i, y2 = LScr->Height - 1 - i; y < LScr->Height;
  151.                 y += 4, y2 -= 4 )
  152.             {
  153.                 Move(rp,0,y2);
  154.                 Draw(rp,LScr->Width-1,y);
  155.             }
  156.         }
  157.         break;
  158.     case 4:
  159.         /* Square
  160.          */
  161.         for( i = 0; i < 10 &&(( RetVal = ContinueBlanking()) == OK ); i++ )
  162.         {
  163.             for( x = i; x < LScr->Width; x += 20 )
  164.             {
  165.                 Move(rp,x,0);
  166.                 Draw(rp,x,LScr->Height-1);
  167.             }
  168.             for( y = i; y < LScr->Height; y += 20 )
  169.             {
  170.                 Move(rp,0,y);
  171.                 Draw(rp,LScr->Width-1,y);
  172.             }
  173.             for( x = 19 - i; x < LScr->Width; x += 20 )
  174.             {
  175.                 Move(rp,x,0);
  176.                 Draw(rp,x,LScr->Height-1);
  177.             }
  178.             for( y = 19 - i; y < LScr->Height; y += 20 )
  179.             {
  180.                 Move(rp,0,y);
  181.                 Draw(rp,LScr->Width-1,y);
  182.             }
  183.         }
  184.         break;
  185.     }
  186.  
  187.     return RetVal;
  188. }
  189.  
  190. LONG Blank( PrefObject *Prefs )
  191. {
  192.     struct Screen *LScr;
  193.     struct Window *Wnd;
  194.     LONG RetVal;
  195.     
  196.     if( LScr = cloneTopScreen( FALSE, 0 ))
  197.     {
  198.         Wnd = BlankMousePointer( LScr );
  199.         RetVal = RenderLines( LScr, Prefs[0].po_Active );
  200.         while( RetVal == OK )
  201.         {
  202.             RetVal = ContinueBlanking();
  203.             Delay( 5 );
  204.         }
  205.         UnblankMousePointer( Wnd );
  206.         CloseScreen( LScr );
  207.     }
  208.     else
  209.         RetVal = FAILED;
  210.  
  211.     return RetVal;
  212. }
  213.